Euler Problem 43

The number 1406357289 is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.

Let $d_1$ be the 1st digit, $d_2$ be the 2nd digit, and so on. In this way, we note the following:

  • $d_2d_3d_4=406$ is divisible by 2
  • $d_3d_4d_5=063$ is divisible by 3
  • $d_4d_5d_6=635$ is divisible by 5
  • $d_5d_6d_7=357$ is divisible by 7
  • $d_6d_7d_8=572$ is divisible by 11
  • $d_7d_8d_9=728$ is divisible by 13
  • $d_8d_9d_{10}=289$ is divisible by 17

Find the sum of all 0 to 9 pandigital numbers with this property.


In [1]:
def f(v = (), len_v = 0):
    primes = [2, 3, 5, 7, 11, 13, 17]
    if len_v == 0 or (not(v[-1] in v[:-1]) and (len_v < 4 or (v[-3]*100 + v[-2]*10 + v[-1]) % primes[len(v)-4] == 0)):
        if len_v == 10:
            yield v
        else:
            for d in range(10):
                for w in f(v+(d,), len_v + 1):
                    yield w

print(sum(sum(v[i]*10**(9-i) for i in range(10)) for v in f()))


16695334890

In [ ]: